{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "f4cadb60",
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import numpy as np\n",
    "\n",
    "import mindspore as ms\n",
    "from mindspore import nn\n",
    "from mindspore import context\n",
    "\n",
    "context.set_context(mode=context.GRAPH_MODE, device_target=\"CPU\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "dc1d8bbf",
   "metadata": {},
   "outputs": [],
   "source": [
    "x = np.arange(-5, 5, 0.3)[:32].reshape((32, 1))\n",
    "y = -5 * x +  0.1 * np.random.normal(loc=0.0, scale=20.0, size=x.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "cde94857",
   "metadata": {},
   "outputs": [],
   "source": [
    "net = nn.Dense(1, 1)\n",
    "loss_fn = nn.loss.MSELoss()\n",
    "opt = nn.optim.SGD(net.trainable_params(), learning_rate=0.01)\n",
    "with_loss = nn.WithLossCell(net, loss_fn)\n",
    "train_step = nn.TrainOneStepCell(with_loss, opt).set_train()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "d3510097",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch: 0, loss is 207.47197\n",
      "epoch: 1, loss is 149.01917\n",
      "epoch: 2, loss is 107.40656\n",
      "epoch: 3, loss is 77.782394\n",
      "epoch: 4, loss is 56.69282\n",
      "epoch: 5, loss is 41.679024\n",
      "epoch: 6, loss is 30.990522\n",
      "epoch: 7, loss is 23.381235\n",
      "epoch: 8, loss is 17.964025\n",
      "epoch: 9, loss is 14.107362\n",
      "epoch: 10, loss is 11.361651\n",
      "epoch: 11, loss is 9.406833\n",
      "epoch: 12, loss is 8.015056\n",
      "epoch: 13, loss is 7.024112\n",
      "epoch: 14, loss is 6.318525\n",
      "epoch: 15, loss is 5.8160887\n",
      "epoch: 16, loss is 5.4582815\n",
      "epoch: 17, loss is 5.2034373\n",
      "epoch: 18, loss is 5.0218987\n",
      "epoch: 19, loss is 4.892553\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[WARNING] DEBUG(7345,7f391a7b0740,python):2023-02-02-21:46:21.625.184 [mindspore/ccsrc/debug/debugger/debugger.cc:92] Debugger] Not enabling debugger. Debugger does not support CPU.\n"
     ]
    }
   ],
   "source": [
    "for epoch in range(20):\n",
    "    loss = train_step(ms.Tensor(x, ms.float32), ms.Tensor(y, ms.float32))\n",
    "    print('epoch: {0}, loss is {1}'.format(epoch, loss))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "757c0fe7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The true linear function is y = -5 * x + 0.1\n",
      "The trained linear model is y = -4.918704986572266 * x + 0.20317044854164124\n",
      "x = -10, predicted y = [[49.39022]]\n",
      "x = -5, predicted y = [[24.796696]]\n",
      "x = 0, predicted y = [[0.20317045]]\n",
      "x = 5, predicted y = [[-24.390354]]\n",
      "x = 10, predicted y = [[-48.98388]]\n"
     ]
    }
   ],
   "source": [
    "wb = [x.asnumpy() for x in net.trainable_params()]\n",
    "w, b = np.squeeze(wb[0]), np.squeeze(wb[1])\n",
    "print('The true linear function is y = -5 * x + 0.1')\n",
    "print('The trained linear model is y = {0} * x + {1}'.format(w, b))\n",
    "\n",
    "for i in range(-10, 11, 5):\n",
    "    print('x = {0}, predicted y = {1}'.format(i, net(ms.Tensor([[i]], ms.float32))))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "31b52262",
   "metadata": {},
   "outputs": [],
   "source": [
    "from matplotlib import pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "d5fdbc2b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7f38b492d990>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAioAAAGdCAYAAAA8F1jjAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAABgG0lEQVR4nO3deZyN5f/H8deZ3ZiFEWbsk7JMY+zDIPtWmmiVJZFUqKgUKoY2ISQVlSxFabOkMiUi+2AMxpppRMzYzYJZnHP//jhf8zMYZjkzZ5b38/E4j69zn3v53N+ZnLfruu7rMhmGYSAiIiJSCDnYuwARERGRrCioiIiISKGloCIiIiKFloKKiIiIFFoKKiIiIlJoKaiIiIhIoaWgIiIiIoWWgoqIiIgUWk72LiCvLBYLx48fx9PTE5PJZO9yREREJBsMwyApKYlKlSrh4JB1u0mRDyrHjx+natWq9i5DREREcuHo0aNUqVIly8+LfFDx9PQErDfq5eVl52pEREQkOxITE6latWrG93hWinxQudLd4+XlpaAiIiJSxNxq2IYG04qIiEihpaAiIiIihZaCioiIiBRaRX6MioiI2J7ZbCY9Pd3eZUgR5ujoiJOTU56nDlFQERGRTJKTk/nvv/8wDMPepUgR5+7ujp+fHy4uLrk+h4KKiIhkMJvN/Pfff7i7u1O+fHlNpCm5YhgGaWlpnDp1itjYWO68886bTup2MwoqIiKSIT09HcMwKF++PKVKlbJ3OVKElSpVCmdnZ/7991/S0tJwc3PL1Xk0mFZERK6jlhSxhdy2olxNLSpZMFsMImLPcjIphQqebgT7++DooP9wRURECpKCyg2ER8cxfvle4hJSMrb5ebsRFhpA10A/O1YmIiJFkclkYsmSJfTo0cPepRQ56vq5Rnh0HIMXRGYKKQDxCSkMXhBJeHScnSoTEZGbOXXqFIMHD6ZatWq4urri6+tLly5d2LBhg71LkzxQi8pVzBaD8cv3cqMH8gzABIxfvpdOAb7qBhIRKWQeeugh0tLSmD9/PrfffjsnTpxg1apVnDlzxt6lSR6oReUqEbFnr2tJuZoBxCWkEBF7tuCKEhEpgswWg00xZ1gWdYxNMWcwW/J3Tpbz58+zbt06Jk6cSLt27ahevTrBwcGMHj2a+++/H4CpU6dSr149SpcuTdWqVRkyZAjJyckZ55g3bx5lypTh559/pnbt2ri7u/Pwww9z8eJF5s+fT40aNShbtiwvvPACZrM547gaNWrw1ltv0atXL0qXLk3lypX5+OOPb1rv0aNHefTRRylTpgw+Pj50796dw4cPZ3y+Zs0agoODKV26NGXKlKFly5b8+++/tv0/rYhQULnKyaSsQ0pu9hMRKYnCo+NoNXE1vT7fzLBFUfT6fDOtJq7O165zDw8PPDw8WLp0KampqTfcx8HBgQ8//JA9e/Ywf/58Vq9ezauvvpppn4sXL/Lhhx+yaNEiwsPDWbNmDQ888AC//vorv/76K1999RWffvopP/zwQ6bjJk+eTP369dmxYwejRo1i2LBhrFy58oZ1pKen06VLFzw9PVm3bh0bNmzAw8ODrl27kpaWxuXLl+nRowdt2rRh165dbNq0iaeffrrEPomlrp+rVPDM3jPe2d1PRKSkuTLO79r2kyvj/Gb2bZQvDyU4OTkxb948Bg0axKxZs2jUqBFt2rThscceIygoCIDhw4dn7F+jRg3efvttnn32WT755JOM7enp6cycOZOaNWsC8PDDD/PVV19x4sQJPDw8CAgIoF27dvz555/07Nkz47iWLVsyatQoAGrVqsWGDRuYNm0anTp1uq7Wb7/9FovFwuzZszPCx9y5cylTpgxr1qyhSZMmJCQkcN9992XUUbduXdv+H1aEqEXlKsH+Pvh5u5FVZjVhffon2N+nIMsSESkSbjXOD6zj/PKrG+ihhx7i+PHj/PTTT3Tt2pU1a9bQqFEj5s2bB8Aff/xBhw4dqFy5Mp6enjz++OOcOXOGixcvZpzD3d09IxwAVKxYkRo1auDh4ZFp28mTJzNdOyQk5Lr3+/btu2GdO3fu5NChQ3h6ema0BPn4+JCSkkJMTAw+Pj7079+fLl26EBoayvTp04mLK7kPciioXMXRwURYaADAdWHlyvuw0AANpBURuYHCMM7Pzc2NTp06MWbMGDZu3Ej//v0JCwvj8OHD3HfffQQFBfHjjz+yffv2jHEkaWlpGcc7OztnOp/JZLrhNovFkusak5OTady4MVFRUZleBw8epHfv3oC1hWXTpk20aNGCb7/9llq1arF58+ZcX7MoU1C5RtdAP2b2bYSvd+buHV9vt3xrshQRKQ4K4zi/gIAALly4wPbt27FYLEyZMoXmzZtTq1Ytjh8/brPrXBsiNm/enGV3TaNGjfj777+pUKECd9xxR6aXt7d3xn4NGzZk9OjRbNy4kcDAQL7++mub1VuUaIzKDXQN9KNTgK9mphURyQF7jvM7c+YMjzzyCE8++SRBQUF4enqybds2Jk2aRPfu3bnjjjtIT09nxowZhIaGsmHDBmbNmmWz62/YsIFJkybRo0cPVq5cyffff88vv/xyw3379OnD5MmT6d69O2+++SZVqlTh33//ZfHixbz66qukp6fz2Wefcf/991OpUiUOHDjA33//Tb9+/WxWb1GioJIFRwcTITXL2bsMEZEi48o4v/iElBuOUzFhbZ3Oj3F+Hh4eNGvWjGnTphETE0N6ejpVq1Zl0KBBvPbaa5QqVYqpU6cyceJERo8eTevWrZkwYYLNvvxffvlltm3bxvjx4/Hy8mLq1Kl06dLlhvu6u7vz119/MXLkSB588EGSkpKoXLkyHTp0wMvLi0uXLrF//37mz5/PmTNn8PPzY+jQoTzzzDM2qbWoMRmGkb8Pt+ezxMREvL29SUhIwMvLy97liIgUaSkpKcTGxuLv75+r1W6vPPUDZAorV9qji2MXeo0aNRg+fHimp4rE6ma/T9n9/tYYFRERsRmN8xNbU9ePjWnVZREp6TTOT2xJQcWGtOqyiIhVSRrnd/XU92J76vrJQlISjBsHly5lb3+tuiwiImJ7CipZePFFGD8eGjeGyMib72vv2RhFRESKKwWVLDxyfyq+XhfYtw+aN4f33oOrFsvMpDDMxigiIlIcKahkocufo9idWJ0Hy6wmPR1Gj4Z27eBGXZGFcTZGERGR4kBBJSvNm3NbWQs/nO/AHKen8XBNY906CAqCr76Cq2ef0arLIiIi+UNBJSs9e0J0NKYuXRhw+XN2ptahhXc0SUnQr5/147P/68nRqssiIiL5Q0HlZipVghUr4JNPuN39BGsTGvC261s4OVr4/nuoVw/++EOrLouIiNXFixd56KGH8PLywmQycf78ebvVsmbNGrvXYAsKKrdiMsHgwRAVhVPzpryeOpZN5mBqeRzj+HHo1Mn6hFDbOzQbo4iIPZhMppu+xo0bV2C1zJ8/n3Xr1rFx40bi4uIyrYacn9q2bXvdFP4tWrQo0BryiyZ8y64774R162DiRJqMG0dkci1eKfUxMy/154MPYOVKWLjQj/UjNRujiEhBiov7/3mqvv32W8aOHcuBAwcytnl4eGT82TAMzGYzTk758/UXExND3bp1CQwMzJfz54SLiwu+vr72LiPP1KKSE05O8PrrEBFB6YAafHJpAD/TjQpuiezZA8HBMG2qiWb+5ejeoDIhNcsppIiI5DNfX9+Ml7e3NyaTKeP9/v378fT0ZMWKFTRu3BhXV1fWr19P//796dGjR6bzDB8+nLZt22a8t1gsTJgwAX9/f0qVKkX9+vX54Ycfsqyjbdu2TJkyhb/++guTyZRxLpPJxNKlSzPtW6ZMGebNmwdYZ7Y1mUwsXryYdu3a4e7uTv369dm0aVOmYzZs2EDbtm1xd3enbNmydOnShXPnztG/f3/Wrl3L9OnTM1qRDh8+fMOunx9//JG77roLV1dXatSowZQpUzJdo0aNGrz77rs8+eSTeHp6Uq1aNT777LNs/Rzyi4JKbjRsCNu3w0sv0c20guiUmnR3/520NHjlFejQAY4csXeRIiI2YBhw4YJ9XobtJskcNWoU7733Hvv27SMoKChbx0yYMIEvv/ySWbNmsWfPHl588UX69u3L2rVrb7j/4sWLGTRoECEhIcTFxbF48eIc1fj6668zYsQIoqKiqFWrFr169eLy5csAREVF0aFDBwICAti0aRPr168nNDQUs9nM9OnTCQkJYdCgQcTFxREXF0fVqlWvO//27dt59NFHeeyxx9i9ezfjxo1jzJgxGYHpiilTptCkSRN27NjBkCFDGDx4cKYWqoKmrp/ccnODKVMgNJTy/fuz5N8ufMFTDHf+iDVrXAkKgk8+gd69s39KLWgoIoXOxYtwVddJgUpOhtKlbXKqN998k06dOmV7/9TUVN59913++OMPQkJCALj99ttZv349n376KW3atLnuGB8fH9zd3XPd5TJixAi6desGwPjx47nrrrs4dOgQderUYdKkSTRp0oRPPvkkY/+77ror488uLi64u7vf9LpTp06lQ4cOjBkzBoBatWqxd+9eJk+eTP/+/TP2u/feexkyZAgAI0eOZNq0afz555/Url07x/dkC2pRyau2bWHXLkwDBvAUs4lKv4tmpXaRkAB9+liDyrlztz5NeHQcrSauptfnmxm2KIpen2+m1cTVWiNIRMQGmjRpkqP9Dx06xMWLF+nUqRMeHh4Zry+//JKYmJh8qfHqlh4/P+sDGCdPngT+v0UlL/bt20fLli0zbWvZsiV///035qumXr+6jivd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HBwcSE1NzfRZYaWgUgIcOXKExMTEjPfHjx+nS5cu/PDDDzRr1owqVarYsbqS49ixY7Rr147GjRuzYMGCIvEXRFHWrFkzgoODmTFjBmDteqhWrRrPPfecBtMWEMMweP7551myZAlr1qzhzjvvtHdJJUpSUhL//vtvpm0DBgygTp06jBw5ssh0wWmMSglQrVq1TO89PDwAqFmzpkJKATl27Bht27alevXqvP/++5w6dSrjM19fXztWVny99NJLPPHEEzRp0oTg4GA++OADLly4wIABA+xdWokxdOhQvv76a5YtW4anpyfx8fEAeHt7U6pUKTtXV/x5enpeF0ZKly5NuXLlikxIAQUVkQKxcuVKDh06xKFDh64Lh2rUzB89e/bk1KlTjB07lvj4eBo0aEB4ePh1A2wl/8ycOROAtm3bZto+d+5c+vfvX/AFSZGkrh8REREptDSST0RERAotBRUREREptBRUREREpNBSUBEREZFCS0FFRERECi0FFRERESm0FFRERESk0FJQERERkUJLQUVEREQKLQUVERERKbQUVERERKTQUlARERGRQuv/AGoWwSc0JTp4AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(x, y, label='Samples')\n",
    "plt.plot(x, w * x +  b, c='r', label='True function')\n",
    "plt.plot(x, -5 * x +  0.1, c='b', label='Trained model')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9733759a",
   "metadata": {},
   "source": [
    "**自加实验**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "869cf6e9",
   "metadata": {},
   "outputs": [],
   "source": [
    "#生成模拟数据，y=2x+0.1\n",
    "x = np.arange(-5,5,0.3)[:32].reshape((32,1))\n",
    "y = 2*x + 0.1 * np.random.normal(loc=0.0,scale=20.0,size=x.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "440a3227",
   "metadata": {},
   "outputs": [],
   "source": [
    "#建模\n",
    "net = nn.Dense(1, 1)\n",
    "loss_fn = nn.loss.MSELoss()\n",
    "opt = nn.optim.SGD(net.trainable_params(), learning_rate=0.01)\n",
    "with_loss = nn.WithLossCell(net, loss_fn)\n",
    "train_step = nn.TrainOneStepCell(with_loss, opt).set_train()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "130c92b2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "i:0,loss is 36.221954\n",
      "i:1,loss is 26.678911\n",
      "i:2,loss is 19.879436\n",
      "i:3,loss is 15.033335\n",
      "i:4,loss is 11.57805\n",
      "i:5,loss is 9.11309\n",
      "i:6,loss is 7.353341\n",
      "i:7,loss is 6.0958247\n",
      "i:8,loss is 5.19603\n",
      "i:9,loss is 4.5510764\n",
      "i:10,loss is 4.0877132\n",
      "i:11,loss is 3.7537873\n",
      "i:12,loss is 3.5121672\n",
      "i:13,loss is 3.336409\n",
      "i:14,loss is 3.2076848\n",
      "i:15,loss is 3.1125836\n",
      "i:16,loss is 3.041554\n",
      "i:17,loss is 2.9877894\n",
      "i:18,loss is 2.946441\n",
      "i:19,loss is 2.9140508\n"
     ]
    }
   ],
   "source": [
    "#使用模拟数据训练模型\n",
    "for i in range(20):\n",
    "    loss=train_step(ms.Tensor(x,ms.float32),ms.Tensor(y,ms.float32))\n",
    "    print('i:{0},loss is {1}'.format(i, loss))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "05559e23",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The true linear function is y = 2 * x + 8\n",
      "The trained linear model is y = 2.0099823474884033 * x + 0.15328741073608398\n",
      "x = -10, predicted y = [[-19.946535]]\n",
      "x = -5, predicted y = [[-9.896624]]\n",
      "x = 0, predicted y = [[0.15328741]]\n",
      "x = 5, predicted y = [[10.203199]]\n",
      "x = 10, predicted y = [[20.25311]]\n"
     ]
    }
   ],
   "source": [
    "#预测\n",
    "wb = [x.asnumpy() for x in net.trainable_params()]\n",
    "w, b = np.squeeze(wb[0]), np.squeeze(wb[1])\n",
    "print('The true linear function is y = 2 * x + 8')\n",
    "print('The trained linear model is y = {0} * x + {1}'.format(w, b))\n",
    "\n",
    "for i in range(-10, 11, 5):\n",
    "    print('x = {0}, predicted y = {1}'.format(i, net(ms.Tensor([[i]], ms.float32))))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "1d712d9c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7f38b4ce6e10>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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XNGT3r4DU050or7pD37hXkqXhk8+gdU/WZgV/WeelSPIqBwV5TCQhn5ERERuwNczf00e83ueITJX9Px9ojQ92chm7gYL3HcfzJ0LgYEQdSj/laOw6uWKJGxVVIqJwMBApkyZYvX7tGzZkgEDBlj9PvkxevRoGjRokO/zDx8+jMlkIjo62moxiYh9ahrkQ4C3G3nNPjGRMYejadC1e5MZ7ooqysQTT1Lf9AebuRsPD5g5E9auzUhSwDYrR0pUbIzJZLruY/To0Td13d9++42+ffsWbrAiIsWEs5OJUR2CAa5JVrKej+oQbHsTaTPnouxfEMXdbGIwE0mxuNGmDezeDX37gumKkG2xcqRExcbExsZmP6ZMmYKXl1eOY4MHD84+12KxcPny5Xxdt3z58gXePFBERP5feEgA07uG4u+d80va39uN6V1DbauPyhVVlPdPPEUD0y62EoanJ8yeDatXQ9Wq177NFitHSlRsjL+/f/bD29sbk8mU/Xz//v14enqyatUqGjVqhKurK5s2beLQoUN07NgRPz8/PDw8aNKkCWvXrs1x3auHfkwmE3PmzOHRRx/F3d2dGjVq8N133+V4z+7du3nwwQfx8PDAz8+PZ555hrNnz2a/npSUxLPPPouHhwcBAQFMnDjxhj9f1nDMvHnzqFKlCh4eHvTv35/09HTee+89/P398fX15Z133snxviNHjtCxY0c8PDzw8vKic+fOnDp1Ksc57777Ln5+fnh6etKrVy9SUq4tTc6ZM4fatWvj5ubGHXfcwSeffHLDmEVEsoSHBLBp6H182edOPnyyAV/2uZNNQ++zrSQls4qyb8FWmrOZIbxPqsWVtm0zqii9e+esolzJFitHxSpRsVggKcmYR2HuUT1s2DDeffdd9u3bR7169UhMTKRdu3asW7eOnTt3Eh4eTocOHThy5Mh1rzNmzBg6d+7MH3/8Qbt27Xj66ac5fz5jad2FCxe47777aNiwIdu3byciIoJTp07RuXPn7Pe/9tprbNy4kRUrVvDTTz8RGRnJjh07bhj/oUOHWLVqFREREXz55ZfMnTuX9u3bc+zYMTZu3MiECRN48803+fXXXwEwm8107NiR8+fPs3HjRtasWcM///zDE088kX3Nr776itGjRzNu3Di2b99OQEDANUnI559/zsiRI3nnnXfYt28f48aNY8SIESxcuDDf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oKiKN7PZzIABA2jevDkhISFGh1NsLF68mB07dvDbb78ZHcpNU0XFjg0bNgyTyXTdx/79+5k6dSoJCQkMHz7c6JAdTn4/gysdP36c8PBwOnXqRJ8+fQyKXKRovfDCC+zevZvFixcbHUqxcfToUV555RU+//xz3NzcjA7npmmOih07c+YM586du+451apVo3PnzqxcuRKTyZR9PD09HWdnZ55++mkWLlxo7VAdVn4/AxcXFwBOnDhBy5YtufPOO1mwYAFOTvq/gjWkpaXh7u7O0qVLeeSRR7KPd+vWjQsXLrBixQrjgiuGXnzxRVasWMHPP/9MUFCQ0eEUG8uXL+fRRx/F2dk5+1h6ejomkwknJydSU1NzvGarlKgUA0eOHCE+Pj77+YkTJ2jbti1Lly6lWbNmVKpUycDoio/jx4/TqlUrGjVqxKJFi+ziHwh71qxZM5o2bcrUqVOBjKGHKlWq8OKLL2oybRGxWCy89NJLfPvtt0RGRlKjRg2jQypWEhIS+Pfff3Mc69GjB3fccQdDhw61myE4zVEpBqpUqZLjuYeHBwDVq1dXklJEjh8/TsuWLalatSoffPABZ86cyX7N39/fwMgc18CBA+nWrRuNGzemadOmTJkyhaSkJHr06GF0aMXGCy+8wBdffMGKFSvw9PTk5MmTAHh7e1OqVCmDo3N8np6e1yQjpUuXply5cnaTpIASFZEisWbNGg4ePMjBgwevSQ5V1LSOJ554gjNnzjBy5EhOnjxJgwYNiIiIuGaCrVjP9OnTAWjZsmWO4/Pnz6d79+5FH5DYJQ39iIiIiM3STD4RERGxWUpURERExGYpURERERGbpURFREREbJYSFREREbFZSlRERETEZilREREREZulREVERERslhIVERERsVlKVERERMRmKVERERERm6VERURERGzW/wHXco1fOl3y8AAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#可视化\n",
    "from matplotlib import pyplot as plt\n",
    "%matplotlib inline\n",
    "plt.scatter(x, y, label='Samples')\n",
    "plt.plot(x, w * x +  b, c='r', label='True function')\n",
    "plt.plot(x, 2 * x +  0.1, c='b', label='Trained model')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "9f570f5d",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "MindSpore(1.5.0)",
   "language": "python",
   "name": "mindspore"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
